package com.thread.threadfirst.javaBase;

import javax.validation.constraints.NotNull;
import javax.annotation.Nullable;

/**
 * @Nullable、@NotNull示例
 *
 * 方法返回值
 *
 * @Nullable：对方法的调用没有判空会被提示。
 * @Notnull：方法如果可能返回null会被提示。
 *
 * 方法参数：
 *
 * @Nullable：对参数直接使用没有判空会被提示。
 * @Notnull：调用时传入的参数可能为null会被提示。
 */
public class NullableNotNullTest {

    private static class Role{
        private Long Id;
        private String name;

        public Long getId() {
            return Id;
        }

        public void setId(Long id) {
            Id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    private static class Animal{
        private Long Id;
        private String name;

        public Long getId() {
            return Id;
        }

        public void setId(Long id) {
            Id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }


    public static @Nullable<T> T get(@Nullable T obj, @NotNull Role role){
        System.out.println(role.getName());
        return obj;
    }

    public static void main(String[] args) {
        Animal animal=null;
        Role role=null;
        Animal animall=(Animal) get(animal,role);
        System.out.println(animall.getName());
    }
}
